from lxml import etree

# xpath解析
# （1）本地文件                               etree.parse
# （2）服务器响应的数据  response.read().decode('utf-8') **  etree.HTML()

# xpath 解析本地文件
tree = etree.parse('xpath解析使用.html')
print(tree)

# tree.xpath('xpath路径')
    # 1. 路径查询
    #     //: 查找所有子孙节点，不考虑层级关系
    #     /: 找直接子节点
    # 2. 谓词查询


# 查找ul下面的li
li_list = tree.xpath('//body/ul/li')
# 判断列表的长度


# 查找所有有id的属性的li标签
# text() 获取标签中的内容
# li_list = tree.xpath('//ul/li[@id]/text()')

# 找到id 为l1的li标签  注意引号的问题
li_list = tree.xpath('//ul/li[@id="l1"]/text()')

# 查找到id 为l1标签的class的属性值
li = tree.xpath('//ul/li[@id="l1"]/@class')

# 模糊查询: 查询id中包含l的li标签
li_list = tree.xpath('//ul/li[contains(@id,"l)]/text()')

# 查询id的值以l开头的li标签
li_list = tree.xpath('//ul/li[starts-with(@id,"c")]/text()')

# 查询id为l1 和class 为c1的
li_list =  tree.xpath('//ul/li[@id="l1" and @class="c1"]/text()')

li_list  = tree.xpath('//ul/li[@id="l1" | @id="l2"]/text() | //ul/li[@id="l2"]/text()')

print(len(li_list))
print(li_list)

